﻿using System;
using System.Collections.Generic;
using System.Text;

namespace XFSale.Lib
{

    static class StringUtil
    {
        //将字符串转换为字节数组，数组长度为len，最后一个字节为0x00
        public static byte[] StrToBytes(string str, int byteCount, Encoding encode)
        {
            if (byteCount <= 0)
                throw new ArgumentOutOfRangeException();

            byte[] bytesNew = new byte[byteCount];
            Array.Clear(bytesNew, 0, byteCount);

            if (str == null)
                str = string.Empty;
            byte[] bytesOld = encode.GetBytes(str);
            Array.Copy(bytesOld, bytesNew, bytesOld.Length < byteCount ? bytesOld.Length : byteCount - 1);
            bytesOld = null;

            return bytesNew;
        }
        public static byte[] StrToBytes(string str, Encoding encode)
        {
            return StrToBytes(str, encode.GetByteCount(str) + 1, encode);
        }
        public static byte[] StrToBytes(string str)
        {
            return StrToBytes(str, Encoding.Default);
        }

        public static string BytesToStr(byte[] bytes, int byteIndex, int byteCount, Encoding encode)
        {
            if (byteIndex < 0 || byteCount <= 0)
                throw new ArgumentOutOfRangeException();

            if (byteCount + byteIndex > bytes.Length)
                byteCount = bytes.Length - byteIndex;

            return encode.GetString(bytes, byteIndex, byteCount).Trim(new char[] { '\x00', '\x20' });
        }
        public static string BytesToStr(byte[] bytes, int byteIndex, int byteCount)
        {
            return BytesToStr(bytes, byteIndex, byteCount, Encoding.Default);
        }
        public static string BytesToStr(byte[] bytes)
        {
            return BytesToStr(bytes, 0, bytes.Length);
        }
    };

}
